Axel: Backlog
ユーザ
OSから見たアプリケーションの開発者
言語ランタイムを作るもよし、CLI/GUI アプリケーションを作るもよし
各種ストーリーのテンプレート
それぞれのストーリーは同格
基本はユーザーストーリーを使う
誰がが重要でない時はシステムストーリー
誰が + 状況が加えられる時はジョブストーリー
わかりやすいものを使用すること
ユーザーストーリー
Who に視点を置く
(ある役割/Who)として(ある行動/What)をする。それは(ある価値/Why)のためだ
ジョブストーリー
When に視点を置く
(ある状況/When)のとき、(ある行動/What)をする。それは(ある価値/Why)のためだ
システムストーリー
(目的語)に対して(ある行動/What)をする
(目的語)に対して(ある行動/What)をする。それは(ある価値/Why)のためだ
Feature/Epic or Story/Task
CUI
ユーザはOSから出力された文字をシリアル通信で受け取れる
プロジェクトを初期化する
UEFI を使った起動について調べる
UEFI でシステムを起動できるようにする
QEMU でのシリアル通信方法について調べる
シリアル通信による出力を実装する
ユーザはOSへシリアル通信で文字を送信できる
シリアル通信の文字受信を実装する
ユーザはOSへコマンドを送信することでOSを操作できる
echo コマンドを実装をする
プログラムの並行実行
ユーザはプログラムをプロセスとして実行できる
プロセス構造体を定義する
コンテキストスイッチを実装する
簡素なスケジューラを実装する
プロセスの生成関数を実装する
カーネルのバイナリに埋め込んだ機能をプロセスとして実行可能にする
ユーザは複数個のプロセスを並行に実行できる
タイマー割り込みを実装する
2個のプロセスを交互に切り替えて動くようにする
実行が終わったとき、プロセスは終了する
プログラムの終了判定ができる仕組みを導入する
終了していたらそのプロセスを破棄する
プロセスは他のプロセスのメモリを直接参照することはできない。それはセキュリティと堅牢性のためだ
プロセス毎に独立したページを使用する
ユーザはシステムコールを使ってカーネルの機能を利用できる
ユーザランドとカーネルランドを分離する
システムコールを実装する
プロセスはプロセスを動的に作成できる。
プロセス生成用のシステムコールを実装する
プロセスは他のプロセスと通信できる。それはプロセス同士が協力して処理をするためだ
プロセス間通信について調べる
プロセス間通信を実装する
ユーザはスレッドを使って一つのプロセス内で並行に処理を実行できる
スレッドを作る
動的メモリ管理
ユーザはカーネルから動的にメモリを確保できる
物理メモリを管理する
ページングを有効にする
仮想メモリと物理メモリのマッピングを実装する
カーネル内部用のメモリ確保関数を実装する
カーネル内で static にメモリをする使っている箇所を動的メモリ管理で置き換える
メモリ確保用のシステムコールを実装する
ユーザはカーネルから動的に確保したメモリを返却できる
メモリ解放用のシステムコール実装する
プロセスが終了したとき、OSはプロセスの使用した動的メモリを回収する。それはメモリリークを防ぐためだ
プロセスを破棄するときにメモリリソースも破棄する
ファイルシステムを使ったディスクI/O
ユーザはファイルの一覧を取得できる
ディスクへのアクセス方法について調べる
polling で READ を実装する
FAT32の読む部分だけ実装する
ファイル一覧取得用のシステムコールを実装する
ユーザはファイルを読み込める
FAT32からファイルを読む実装をする
ファイル読み込み用のシステムコールを実装する
ユーザはファイルを作成できる
polling で WRITE を実装する
FAT32へファイルを書き込む実装をする
ファイル書き込み用のシステムコールを実装する
ユーザはファイルを更新できる
ファイル更新用のシステムコールを実装する
ユーザはファイルを削除できる
ファイル削除用のシステムコールを実装する
ユーザはディレクトリを作ることができる、なぜならそこに複数個のファイルをまとめて入れたいからだ
それぞれディレクトリに対応させる
ユーザはプログラムファイルをプロセスとして実行できる
指定したファイルを ELF として読み込む
読み込んだ ELF からプロセスを生成する
GUI
ユーザはOSから出力された文字をディスプレイで見られる
UEFI でのグラフィックの使い方を調べる
フォントファイルを読み込めるようにする
フォントデータから画像を描画できるようにする
文字をフォントを使って表示できるようにする
ユーザはOSへキーボードから文字を入力することができる
キーボード割り込みを実装する
キーボード割り込みから受け取った文字データをOSへの入力として扱う
ユーザはウィンドウを表示できる
ユーザはウィンドウを複数個表示できる
ユーザはウィンドウを選択できる
ユーザは選択したウィンドウに文字を入力できる
ユーザはマウスを使ってマウスカーソルを操作できる
ユーザはマウスを使ってウィンドウを選択できる